import { get, post, put, del } from '~/utils/request';
import type {
  IPaginationResponse,
  IMenu,
  IMenuTree,
  ICreateMenu,
  IUpdateMenu,
  IQueryMenu
} from '@nbase/shared';
import { MENU_TYPE, MENU_TYPE_LABELS } from '@nbase/shared';

// 导出共享常量
export { MENU_TYPE, MENU_TYPE_LABELS };

/**
 * 菜单信息
 */
export type Menu = IMenu;

/**
 * 菜单树
 */
export type MenuTree = IMenuTree;

/**
 * 创建菜单请求参数
 */
export type CreateMenuDto = ICreateMenu;

/**
 * 更新菜单请求参数
 */
export type UpdateMenuDto = IUpdateMenu;

/**
 * 查询菜单请求参数
 */
export type QueryMenuDto = IQueryMenu;

/**
 * 菜单服务
 */
export const menuService = {
  /**
   * 获取菜单列表
   */
  getList(params?: QueryMenuDto): Promise<IPaginationResponse<Menu>> {
    return get('/system/menu', { params });
  },

  /**
   * 获取菜单树
   */
  getTree(): Promise<MenuTree[]> {
    return get('/system/menu/tree');
  },

  /**
   * 获取菜单详情
   */
  getById(id: string): Promise<Menu> {
    return get(`/system/menu/${id}`);
  },

  /**
   * 创建菜单
   */
  create(data: CreateMenuDto): Promise<Menu> {
    return post('/system/menu', data);
  },

  /**
   * 更新菜单
   */
  update(id: string, data: UpdateMenuDto): Promise<Menu> {
    return put(`/system/menu/${id}`, data);
  },

  /**
   * 删除菜单
   */
  delete(id: string): Promise<{ message: string }> {
    return del(`/system/menu/${id}`);
  },
};

